DJI Payload SDK (PSDK) 개발 기술 (2025-09-26)

DJI Payload SDK (PSDK) 개발 기술 (2025-09-26)

1. DJI Payload SDK (PSDK) 개요 및 아키텍처

1.1 PSDK 정의, 목적 및 핵심 사상

DJI Payload SDK(이하 PSDK)는 개발자가 DJI 드론에 장착 가능한 맞춤형 페이로드(Payload)를 개발할 수 있도록 DJI가 제공하는 공식 소프트웨어 개발 키트(Software Development Kit)이다.1 PSDK의 근본적인 목적은 드론의 활용 가능성을 특정 산업 분야의 요구에 맞춰 무한히 확장하는 데 있다. 개발자는 PSDK를 통해 드론의 비행 제어 시스템, 센서 데이터, 전력 시스템, 통신 채널 등 핵심 자원에 접근할 수 있다.1

PSDK의 핵심 사상은 단순한 하드웨어 탑재를 넘어, 페이로드가 드론 플랫폼과 유기적으로 통합되어 지능적인 임무를 수행하게 하는 것에 있다. 개발자는 자신이 설계한 소프트웨어 로직과 알고리즘 프레임워크에 따라 자동 비행 제어, 페이로드 기능 제어, 영상 이미지 분석, 매핑 카메라, 확성기 및 서치라이트 등 다양한 형태의 페이로드를 구현할 수 있다.1 이러한 페이로드는 공공 안전, 소방, 구조, 파이프라인 및 공장 검사, 지질 조사, 도시 계획, 환경 및 생물 보호 등 광범위한 산업 분야에서 활용된다.4

PSDK 개발은 본질적으로 하드웨어와 소프트웨어의 공동 설계(Co-design) 과업이라는 특징을 가진다. PSDK의 기능은 X-Port, SkyPort, E-Port 또는 SDK 확장 포트 어댑터와 같은 특정 물리적 하드웨어 인터페이스와 결합될 때 온전히 발휘된다.1 이는 순수 소프트웨어 SDK와 구별되는 가장 큰 차이점으로, 개발 초기 단계에서의 하드웨어 인터페이스 선택이 전체 시스템의 전력 공급 능력, 데이터 전송 대역폭, 그리고 사용 가능한 PSDK 기능 버전을 결정하는 근본적인 아키텍처 제약 조건으로 작용한다. 따라서 페이로드의 요구사항을 충족하는 하드웨어 인터페이스를 먼저 선정하는 과정은 단순한 구현의 문제가 아닌, 전체 개발 프로젝트의 성패를 좌우하는 핵심적인 전략적 결정이다.

1.2 PSDK 생태계 구성 요소 (PSDK, MSDK, OSDK)

DJI 개발자 생태계는 크게 세 가지의 핵심 SDK로 구성되며, 이들은 상호 보완적인 역할을 수행한다.6

  1. Payload SDK (PSDK): 본 명세서의 주제로, 드론에 장착되는 페이로드 디바이스 자체의 펌웨어나 애플리케이션을 개발하는 데 사용된다. 센서 데이터 수집, 액추에이터 구동 등 페이로드 고유의 기능을 담당한다.

  2. Mobile SDK (MSDK): 조종기에 연결된 스마트폰이나 태블릿과 같은 모바일 장치에서 실행되는 맞춤형 애플리케이션(예: DJI Pilot 대체 앱)을 개발하는 데 사용된다.6 사용자 인터페이스(UI), 고수준 임무 계획 및 제어 로직을 구현하는 역할을 한다.

  3. Onboard SDK (OSDK): 드론에 직접 탑재된 온보드 컴퓨터(예: DJI Manifold, NVIDIA Jetson)에서 실행되는 애플리케이션을 개발하는 데 사용된다.6 실시간 고성능 데이터 처리, 인공지능(AI) 추론, 복잡한 자율 비행 알고리즘 연산 등을 수행한다.

이 세 가지 SDK는 독립적으로 작동할 수도 있지만, 서로 데이터를 교환하며 하나의 통합된 시스템처럼 동작할 수 있도록 설계되었다. 예를 들어, OSDK는 PSDK 디바이스와의 통신을 위한 PayloadDevicePSDKManager 클래스 API를 제공하며 7, PSDK의 데이터 전송 모듈은 MSDK 및 OSDK와 투명한 데이터 채널을 형성할 수 있다.2

이러한 구조는 드론 플랫폼을 하나의 정교한 분산 컴퓨팅 네트워크로 기능하게 한다. 각 구성 요소는 가장 적합한 작업을 위임받는다. 페이로드(PSDK)는 현장에서 데이터를 감지하고 물리적 작업을 수행하며, 온보드 컴퓨터(OSDK)는 수집된 원시 데이터를 실시간으로 분석하고, 모바일 디바이스(MSDK)는 분석된 결과를 시각화하거나 사용자의 상위 레벨 명령을 시스템에 전달한다. 가령, PSDK 기반의 LiDAR 센서가 원시 포인트 클라우드 데이터를 캡처하여 고속 데이터 채널을 통해 OSDK가 탑재된 Manifold 컴퓨터로 전송하면, Manifold는 실시간 3D 맵을 생성하고 장애물 정보를 추출한다. 이 처리된 정보는 다시 MSDK 기반의 커스텀 파일럿 앱으로 전송되어 조종사에게 시각적으로 제공될 수 있다.9 이처럼 PSDK 개발은 단순히 페이로드를 만드는 것을 넘어, 분산형 항공 로보틱스 시스템에 새로운 연산 및 기능 노드(Node)를 통합하는 과정으로 이해해야 한다.

1.3 소프트웨어 및 하드웨어 통합 아키텍처

PSDK 기반 페이로드 시스템의 전체 아키텍처는 페이로드 디바이스, 하드웨어 인터페이스, 드론 본체, 그리고 조종기(MSDK 앱 포함)로 구성된다.

  • 소프트웨어 아키텍처: 페이로드의 핵심 로직은 C 언어(C99 및 C11 표준 지원)로 작성되며, 이는 PSDK 라이브러리를 통해 드론의 기능에 접근한다.2 PSDK는 모듈식 설계를 채택하여 Linux 및 실시간 운영체제(RTOS)와 같은 다양한 임베디드 시스템에 쉽게 이식(Porting)할 수 있도록 구조화되어 있다.2 PSDK의 소스 코드는 MIT 라이선스에 따라 배포되므로, 개발자는 상업적 목적의 제품 개발 및 코드 수정에 있어 광범위한 자유를 가진다.1 이는 독점적 페이로드 솔루션 개발의 진입 장벽을 크게 낮추는 중요한 요소이다.

  • 하드웨어 아키텍처: 개발된 펌웨어가 탑재된 페이로드 MCU 또는 온보드 컴퓨터는 SkyPort V2, X-Port, E-Port 등의 표준화된 하드웨어 인터페이스를 통해 드론의 주 시스템 버스에 물리적으로 연결된다.3 이 인터페이스는 전력 공급뿐만 아니라 데이터 통신 채널의 역할을 동시에 수행한다.

데이터와 제어 명령의 흐름은 다음과 같은 경로를 따른다. 조종사가 DJI Pilot 앱(MSDK 기반)의 커스텀 위젯 버튼을 누르면, 이 명령은 조종기에서 드론으로 무선 전송된다. 드론은 수신된 명령을 내부 통신 버스를 통해 해당 페이로드가 연결된 하드웨어 포트로 전달한다. 마지막으로, 페이로드의 MCU는 PSDK 라이브러리를 통해 이 명령을 수신하고, 사전에 정의된 동작(예: 서치라이트 점등)을 수행한다.

1.4 PSDK 버전별 주요 변경 사항 및 호환성

PSDK는 지속적으로 업데이트되며, 각 버전은 새로운 기능 추가, 버그 수정, 그리고 신규 드론 기체 지원을 포함한다. 최신 릴리스 버전은 3.13.1이며, Mavic 3TA 모델 지원 추가 및 Matrice 300, Matrice 350 RTK 관련 버그 수정 등이 포함되었다.1

PSDK 버전의 역사는 DJI의 기술 발전 방향과 밀접한 관련이 있다. DJI는 2021년 10월 21일부로 PSDK V2.x 버전과 구형 SkyPort 하드웨어에 대한 개발을 공식적으로 중단했다.10 이는 하위 호환성 유지보다는 최신 플랫폼으로의 전환을 유도하는 DJI의 명확한 전략을 보여준다. 각 PSDK 버전은 특정 하드웨어 인터페이스와 강하게 결속되어 있다.

  • PSDK V1.x: 구형 SkyPort V1과 호환된다.10

  • PSDK V2.x: SkyPort V2 및 X-Port와 주로 사용되었으나, 현재는 개발이 중단되었다.10

  • PSDK V3.x: 현재의 표준 버전으로, E-Port, E-Port V2, X-Port, SDK Round Ribbon Cable 등 최신 하드웨어 인터페이스를 지원한다.10

이러한 버전 정책은 개발자에게 중요한 시사점을 제공한다. 최신 드론 기체(예: Matrice 400)를 사용하기 위해서는 반드시 최신 버전의 PSDK(예: 3.12.0 이상)를 사용해야만 한다.11 구형 SDK 및 하드웨어와의 호환성은 보장되지 않는다. 이는 DJI가 생태계의 파편화를 방지하고 보안 및 기능적 무결성을 유지하기 위한 의도적인 선택이다. 따라서 개발자는 페이로드 제품의 장기적인 생명주기를 계획할 때, DJI의 기술 로드맵에 따른 잠재적인 강제 업그레이드 가능성을 반드시 고려해야 한다.

2. PSDK 지원 플랫폼 및 하드웨어 인터페이스 기술 명세

PSDK 개발의 첫 단계는 프로젝트의 요구사항에 부합하는 드론 플랫폼과 하드웨어 인터페이스를 선정하는 것이다. 이 섹션은 해당 결정을 내리는 데 필요한 구체적이고 정량적인 기술 데이터를 제공한다.

2.1 공식 지원 드론 기체 명세

PSDK는 DJI의 산업용 드론 라인업을 중심으로 지원된다. 각 드론은 최대 탑재 가능 무게, 방수방진(IP) 등급, 사용 가능한 포트 종류, 그리고 호환되는 최소 PSDK 버전에서 차이를 보인다. 개발자는 페이로드의 무게, 크기, 그리고 요구되는 기능에 따라 최적의 드론 기체를 선택해야 한다.

다음 표는 PSDK를 공식적으로 지원하는 주요 드론 기체와 핵심 사양을 요약한 것이다. 이 표는 여러 문서에 분산된 정보를 통합하여 11, 개발자가 초기 기획 단계에서 플랫폼 호환성을 신속하게 검증하고 비용이 많이 드는 실수를 방지할 수 있도록 돕는다.

드론 모델최대 페이로드IP 등급사용 가능 PSDK 포트최소 PSDK 버전
Matrice 4002.73 kgIP55E-Port V2, PSDK Port (Skyport V2, X-Port)3.12.0
Matrice 4D/4TD6 kgIP55E-Port, E-Port Lite3.12.0
Matrice 4E/4T220 gIP55E-Port, E-Port Lite3.11.0
Matrice 350 RTK2.7 kgIP55PSDK Port, E-Port3.1.0
Matrice 300 RTK2.7 kgIP45PSDK Port, OSDK Port2.0
Matrice 30 Series299 g ± 10 gIP55E-Port3.3.0
DJI FlyCart 3030 kgIP55E-Port Lite3.8.0
Mavic 3 Enterprise (3E/3T)135 g / 130 g-E-Port Lite3.7.0
Matrice 3D/3TD200 g-E-Port, E-Port Lite3.10.0

2.2 하드웨어 인터페이스 상세 분석

페이로드와 드론을 연결하는 하드웨어 인터페이스는 단순한 물리적 커넥터를 넘어, 전력 공급, 데이터 통신, 그리고 제어 신호 전달의 핵심 통로이다. 인터페이스의 선택은 페이로드의 성능과 기능을 직접적으로 결정한다. 인터페이스 기술의 발전은 DJI가 구상하는 페이로드의 역할 변화를 명확히 보여준다. 초기 UART 기반의 SkyPort가 저속 제어 신호 및 원격 측정 데이터 전송에 중점을 두었다면 14, 최신 E-Port V2는 USB 3.0과 네트워크 통신을 지원하며 15, 이는 DJI가 4K 영상 스트림, LiDAR 포인트 클라우드, 레이더 데이터 등 방대한 데이터를 실시간으로 처리하는 고성능 지능형 페이로드를 염두에 두고 있음을 시사한다.15 이는 인터페이스가 단순한 ’제어 포트’에서 고대역폭 ’데이터 파이프라인’으로 진화했음을 의미하며, 개발자는 이러한 변화를 이해하고 자신의 애플리케이션에 맞는 인터페이스를 선택해야 한다.

다음 표는 주요 하드웨어 인터페이스의 기술 사양을 비교 분석한 것이다. 이 표는 개발자가 각 인터페이스의 장단점을 명확히 파악하고, 페이로드의 전력 및 데이터 요구사항에 기반한 합리적인 선택을 할 수 있도록 지원한다.

인터페이스지원 PSDK 버전전압 출력 (최대 전력)데이터 전송 방식주요 특징 및 호환 기체
E-Port V2PSDK 3.12+13.6V, 17.0V, 24V (소프트웨어 요청으로 선택 가능, 최대 5A) 13USB 3.0/2.0, 네트워크, UART 13고대역폭 데이터 전송에 최적화. Matrice 400 지원. Skyport V3 어댑터와 호환.
E-PortPSDK 3.x기체별 상이 (예: M350 RTK 24V/4A, M30 19.2-26.1V/4A) 16USB 2.0, UART (3.3V TTL) 16Matrice 30/350/4D/4E 시리즈 지원.
E-Port LitePSDK 3.x5V / 2A 16USB 2.0 (OTG 모드) 15저전력, 경량 페이로드용. Mavic 3E/3T, FlyCart 30 등 지원.
X-PortPSDK 2.x, 3.x13.6V/2A (기본), 17V/2.5A (고전력 요청 시) 16UART (3.3V TTL), Ethernet 113축 짐벌이 통합된 개발 플랫폼. PSDK 2.0 기능 내장.18 M300/350/400 RTK 지원.
SkyPort V2PSDK 2.x, 3.x13.6V/4A (기본), 17V/4A (고전력 요청 시) 16UART (3.3V TTL) 11표준화된 퀵릴리즈 마운트. M300/350/400 RTK 지원.
SDK Round Ribbon CablePSDK 3.x기체별 상이 (예: M300 RTK 24V/4A) 11UART (3.3V TTL) 11OSDK 포트와 연결. 고속 데이터 전송 기능 없음. M300 RTK 등에서 사용.

2.3 지원 온보드 컴퓨터 및 개발 보드

페이로드의 두뇌 역할을 하는 컴퓨팅 플랫폼은 애플리케이션의 복잡성과 실시간 처리 요구사항에 따라 선택된다.

  • 고성능 온보드 컴퓨터: DJI의 Manifold 시리즈는 PSDK와 긴밀하게 통합되어 공식적으로 지원되는 고성능 온보드 컴퓨터이다.13 이 외에도 NVIDIA Jetson Nano, Raspberry Pi와 같은 서드파티 싱글 보드 컴퓨터(SBC)가 Linux 기반 개발 플랫폼으로 널리 사용되며, 공식 튜토리얼에서도 이들을 활용하는 방법을 안내한다.10 이러한 플랫폼은 복잡한 연산, AI 추론, 다중 센서 융합 등 높은 처리 능력이 요구되는 애플리케이션에 적합하다.

  • 마이크로컨트롤러 유닛(MCU): 실시간 제어, 낮은 전력 소모, 그리고 결정론적(deterministic) 동작이 중요한 페이로드의 경우, RTOS를 구동하는 MCU가 선호된다. DJI의 공식 샘플 코드는 STM32 계열 MCU(예: STM32F4_discovery)를 기준으로 작성되어 있어, 해당 플랫폼을 사용한 개발이 용이하다.21

플랫폼 선택은 운영체제(Linux vs. RTOS) 선택과 직접적으로 연결되며, 이는 다시 개발 환경, 사용 가능한 라이브러리, 그리고 구현 가능한 기능의 범위에 큰 영향을 미친다.

3. PSDK 개발 환경 구축 및 요구사항

성공적인 PSDK 개발을 위해서는 정확한 사양의 하드웨어와 소프트웨어로 구성된 개발 환경을 구축하는 것이 필수적이다. 이 섹션에서는 두 가지 주요 개발 경로인 Linux와 RTOS 환경 각각에 대한 구체적인 요구사항을 명시한다.

3.1 운영체제(OS)별 요구사항 및 기능 차이

PSDK는 공식적으로 Linux와 RTOS 두 가지 운영체제를 지원하며, 각각의 선택은 중대한 아키텍처적 트레이드오프(trade-off)를 수반한다.5

  • Linux: Ubuntu 16.04와 같은 배포판이 권장되며, 풍부한 POSIX 호환 환경과 네트워킹, AI 추론, 영상 처리 등 방대한 오픈소스 라이브러리를 활용할 수 있다는 장점이 있다.21 복잡하고 고수준의 기능을 구현하는 데 유리하다.

  • RTOS: FreeRTOS와 같은 실시간 운영체제가 주로 사용되며, 실시간 결정성, 낮은 지연 시간, 그리고 작은 메모리/프로세서 점유율(footprint)을 보장한다.21 정밀한 타이밍이 요구되는 제어 중심의 작업에 이상적이다.

개발자는 페이로드의 핵심 요구사항에 따라 OS를 선택해야 한다. 그러나 공식 문서와 실제 개발 현장 간의 정보 불일치가 존재할 수 있음에 유의해야 한다. 예를 들어, 공식 기능 지원표23에서는 시간 동기화(Time Synchronization) 기능이 Linux에서는 지원되지만 RTOS에서는 지원되지 않는 것으로 표시되어 있다. 반면, 실제 개발자 커뮤니티에서는 PPS(Pulse Per Second) 신호를 이용한 시간 동기화 샘플 코드가 RTOS/STM32 환경에 맞춰져 있어 Linux로 이식하는 데 어려움을 겪는 사례가 보고되었다.25

이러한 불일치는 특정 기능이 API 수준에서는 존재하더라도, 특정 플랫폼을 위한 직관적이고 잘 문서화된 참조 구현(reference implementation)이 부족할 수 있음을 시사한다. 따라서 개발자는 프로젝트 계획 단계에서 고수준 기능 목록에만 의존하기보다, 구현하고자 하는 핵심 기능의 샘플 코드를 직접 검토하여 실제 구현 용이성을 검증하는 과정이 필요하다. ’지원됨’이라는 표시가 ’쉽게 구현 가능함’을 의미하지 않을 수 있다는 점을 인지하는 것이 프로젝트 리스크 관리의 핵심이다.

다음 표는 개발 플랫폼별 주요 기능 지원 여부를 요약한 매트릭스이다.21

기능Linux 지원RTOS 지원비고
로그 관리
정보 관리/구독
기본 카메라/짐벌 기능
고급 카메라/짐벌 관리
전력 관리
비행 제어
커스텀 위젯
HMS 기능
시간 동기화(불확실)공식 문서와 샘플 코드 간 불일치 존재.23
고급 시각 기능-스테레오 카메라 접근 등.21

3.2 필수 소프트웨어 및 툴체인

PSDK 개발에는 C/C++ 프로그래밍 경험이 권장된다.26 PSDK 라이브러리는 C 언어(C99/C11 표준)로 작성되었다.2 플랫폼별로 요구되는 툴체인은 다음과 같다.

  • Linux 환경:

  • C/C++ 컴파일러: GCC 버전 5.4.0 또는 5.5.0.24

  • 빌드 시스템: CMake 버전 2.8 이상.24

  • 의존성 라이브러리: 영상 스트림 기능 사용 시 FFmpeg (4.1.3 이상, 5.0.0 미만 버전).27 고급 센서 기능 사용 시 Libusb.24

  • RTOS 환경 (STM32 기준):

  • 통합 개발 환경(IDE): Keil MDK.22

  • C 컴파일러: Armcc V5.06 update 6 (build 750).27

  • 기타 툴체인: Armasm, ArmLink, FromElf 등 Keil MDK에 포함된 도구.27

컴파일러 버전을 엄격하게 명시하는 것은 PSDK 라이브러리가 특정 컴파일러의 기능이나 동작 방식에 의존할 수 있음을 암시한다. 명시된 버전과 다른 툴체인을 사용할 경우 예기치 않은 호환성 문제가 발생할 수 있으므로, 안정적인 빌드 환경을 위해 명시된 버전을 준수하는 것이 매우 중요하다.

3.3 플랫폼별 개발 환경 설정

3.3.1 Linux 기반 환경 (e.g., Jetson Nano, Manifold)

  1. 툴체인 설치: apt-get과 같은 패키지 관리자를 사용하여 지정된 버전의 GCC, G++, CMake를 설치한다.

  2. 직렬 포트 권한 설정: 개발자 계정을 dialout 그룹에 추가하여 UART 포트에 대한 읽기/쓰기 권한을 획득한다. 명령어는 sudo usermod -a -G dialout $USER이다.24 변경 사항을 적용하려면 로그아웃 후 다시 로그인해야 한다.

  3. USB 포트 권한 설정: 특정 DJI USB 장치를 인식하고 접근 권한을 부여하기 위해 /etc/udev/rules.d/ 디렉토리에 udev 규칙 파일을 생성한다. 예를 들어, SUBSYSTEM=="usb", ATTRS{idVendor}=="2ca3", MODE="0666"와 같은 규칙을 추가하고 시스템을 재부팅한다.28

  4. 의존성 라이브러리 설치: FFmpeg, libusb 등 프로젝트에 필요한 라이브러리를 설치한다.27

3.3.2 RTOS 기반 환경 (e.g., STM32)

  1. Keil MDK 설치 및 활성화: 지정된 버전의 Keil MDK를 설치하고 라이선스를 활성화한다.

  2. Pack 설치: Keil의 Pack Installer를 사용하여 타겟 MCU에 맞는 최신 STM32F4xx_DFP 소프트웨어 팩을 설치한다. 이는 디바이스 드라이버, HAL(Hardware Abstraction Layer) 라이브러리 및 예제 코드를 포함한다.27

  3. 프로젝트 설정: PSDK 샘플 프로젝트 파일(.uvprojx)을 열고, 타겟 디바이스와 디버거(예: J-Link) 설정을 확인한다. 컴파일러 및 링커 옵션이 요구사항과 일치하는지 검토한다.22

4. PSDK 핵심 기능 API 상세 분석

PSDK는 페이로드 개발에 필요한 다양한 기능들을 모듈화된 API 형태로 제공한다. 이 섹션에서는 주요 기능 모듈과 핵심 API의 역할 및 사용법을 상세히 분석한다.

4.1 데이터 통신 및 구독

페이로드와 드론 간의 정보 교환은 PSDK의 가장 기본적인 기능이다.

  • 정보 획득 및 구독: PsdkAircraftInfo_GetBaseInfo와 같은 함수를 통해 드론의 기본 정보를 정적으로 획득할 수 있다.2 실시간으로 변화하는 데이터(예: 고도, 속도, 배터리 상태)는 데이터 구독(Data Subscription) 기능을 통해 지속적으로 수신한다.

  • 데이터 전송 채널: PSDK는 목적과 특성에 따라 두 종류의 데이터 전송 채널을 제공한다.8

  • 명령 채널 (Command Channel): 약 4KB/s의 대역폭을 가지며, 제어 명령과 같이 지연 시간에 민감하고 크기가 작은 데이터를 전송하는 데 사용된다. PSDK-MSDK, PSDK-OSDK 간 통신에 사용된다.9

  • 고속 데이터 채널 (High-speed Data Channel): 영상 스트림이나 대용량 센서 데이터와 같이 높은 처리량이 필요한 데이터를 위해 사용된다. 대역폭은 기체 및 포트 종류에 따라 가변적이다(예: M300 RTK에서 최대 8Mbps).16

  • 대역폭 관리 및 흐름 제어: 개발자는 고속 데이터 채널 내에서 여러 데이터 유형(예: 영상, 파일)이 차지할 대역폭 비율을 설정하여 서비스 품질(QoS)을 관리할 수 있다. 또한, 버퍼와 임계값을 이용한 흐름 제어(Flow Control) 메커니즘이 내장되어 있어 데이터 유실을 방지한다.8 효율적인 통신을 위해서는 데이터의 특성을 고려하여 적절한 채널을 선택하고 대역폭을 할당하는 전략이 필수적이다.

4.2 짐벌 및 카메라 제어

PSDK는 페이로드에 탑재된 짐벌과 카메라를 정밀하게 제어할 수 있는 포괄적인 API를 제공한다.

  • 짐벌 제어: PSDK는 두 가지 수준의 짐벌 제어를 지원한다.

  • 짐벌 기능 (Gimbal Function): 개발자가 직접 짐벌을 제작하는 경우 사용된다. PsdkGimbal_Init 등의 함수를 통해 짐벌 모터 제어, 상태 보고 등 저수준 제어 로직을 구현해야 한다.2

  • 짐벌 관리 (Gimbal Management): Zenmuse H20T와 같은 기존 DJI 짐벌이나 X-Port를 제어할 때 사용된다. 짐벌 모드 설정, 중앙 정렬, 지정된 각도로 회전 등 고수준의 추상화된 API를 제공하여 제어를 용이하게 한다.30

짐벌 제어는 절대 각도 제어(지리 좌표계 기준)와 상대 각도 제어(현재 각도 기준), 그리고 속도 제어 모드를 지원한다.30

  • 카메라 제어: 페이로드에 포함된 카메라의 거의 모든 기능을 제어할 수 있다. 지원되는 기능은 카메라 모델에 따라 다르지만, 일반적으로 다음을 포함한다.31

  • 작업 모드 설정 (사진 촬영/동영상 녹화)

  • 사진 촬영 모드 설정 (단일, 연사, 인터벌)

  • 사진/동영상 촬영 시작 및 중지

  • 노출, ISO, 셔터 속도 등 파라미터 설정

  • 줌(Zoom) 및 초점(Focus) 제어

  • 카메라 상태 정보(녹화 시간, 저장 공간 등) 획득

4.3 커스텀 위젯 및 UI/UX 통합

개발자는 MSDK를 사용하여 별도의 모바일 앱을 만들지 않고도, DJI Pilot 앱 내에 페이로드 제어를 위한 맞춤형 사용자 인터페이스를 통합할 수 있다.

  • 위젯 정의: JSON 형식의 파일을 사용하여 버튼, 스위치, 슬라이더, 값 표시 레이블 등 다양한 UI 위젯의 레이아웃과 속성을 정의한다.2

  • UI 통합: PSDK는 PsdkWidget_Init 함수를 통해 초기화되고, PsdkWidget_RegUiConfigByDirPath 또는 PsdkWidget_RegUiConfigByBinaryArray 함수를 사용하여 JSON 파일과 아이콘 이미지를 조종기 앱으로 업로드한다.2

  • 이벤트 처리: 사용자가 Pilot 앱의 커스텀 위젯을 조작하면(예: 버튼 클릭), 해당 이벤트는 드론을 통해 페이로드로 전달된다. 개발자는 PsdkWidget_RegHandlerList 함수로 콜백 핸들러를 등록하여 이러한 이벤트를 수신하고 그에 맞는 동작을 수행하도록 코드를 작성한다.2

  • 플로팅 윈도우: PsdkWidgetFloatingWindow_ShowMessage API를 사용하여 페이로드의 현재 상태나 중요한 알림을 Pilot 앱 화면에 플로팅 메시지 형태로 표시할 수 있다.2 이 기능은 별도의 앱 개발 없이도 전문적이고 직관적인 사용자 경험을 제공하는 강력한 도구이다.

4.4 전력 관리 및 HMS

안정적인 페이로드 운영을 위해 전력 관리와 상태 모니터링은 매우 중요하다.

  • 전력 관리: 페이로드는 드론으로부터 기본 전력을 공급받지만, 더 높은 전력이 필요한 경우 PsdkPowerManagement_RegWriteHighPowerApplyPinCallback과 같은 API를 통해 고전력 공급을 요청할 수 있다.2 또한, 드론이 전원을 차단하기 전에 페이로드에 사전 알림을 보내 데이터를 안전하게 저장하거나 시스템을 정상 종료할 수 있는 기회를 제공한다.2

  • 상태 관리 시스템 (HMS, Health Management System): 개발자는 커스텀 HMS 메시지를 생성하여 페이로드의 상태(정상, 경고, 오류)를 드론 시스템에 보고할 수 있다.23 이 메시지는 DJI Pilot 앱에 표준화된 방식으로 표시되므로, 조종사는 드론 자체의 상태와 함께 페이로드의 건전성을 실시간으로 모니터링할 수 있다. 이는 운영 안정성과 신뢰성을 크게 향상시킨다.

4.5 비행 제어 및 시간 동기화

PSDK는 페이로드 개발을 위한 것이지만, 드론의 비행과 밀접하게 연관된 고급 기능에도 접근할 수 있다.

  • 비행 제어: PSDK는 Waypoint 임무와 같은 고급 비행 제어 기능에 접근할 수 있는 인터페이스를 제공한다.23 이를 통해 페이로드가 수집한 데이터를 기반으로 드론의 비행 경로를 동적으로 수정하는 등 지능적인 임무 수행이 가능하다.

  • 시간 동기화: 정밀 측량, 매핑, 센서 퓨전과 같은 애플리케이션에서는 데이터의 시간 정확도가 매우 중요하다. PSDK는 드론의 GPS 수신기에서 생성되는 PPS(Pulse Per Second) 신호를 페이로드에 제공하여, 페이로드의 내부 시계와 드론의 시계(UTC 기준)를 마이크로초 단위로 동기화할 수 있도록 지원한다.32

  • 정밀 측위: PsdkPositioning_Init과 같은 API는 RTK(Real-time kinematic) 데이터를 활용하여 센티미터 수준의 정밀한 위치 정보를 획득하는 데 사용된다.2 이는 수집된 데이터에 정확한 지리적 좌표를 태깅하는 데 필수적이다.

4.6 SDK 상호연결 (MOP)

MOP(Mobile Onboard Payload) 채널은 PSDK, MSDK, OSDK 간의 동적 데이터 파이프라인을 생성하는 강력한 통신 메커니즘이다.7 이는 앞서 설명한 분산 컴퓨팅 아키텍처를 구현하는 핵심 기술이다.

  • 채널 생성 및 관리: 개발자는 PsdkMopChannel_Init으로 모듈을 초기화하고, PsdkMopChannel_Create 함수로 채널을 생성할 수 있다. 채널은 신뢰성 있는(TCP와 유사) 전송 또는 비신뢰성(UDP와 유사) 전송 유형으로 생성할 수 있다.2

  • 연결 및 데이터 교환: 서버 역할을 하는 측은 채널 ID를 지정하여 PsdkMopChannel_BindPsdkMopChannel_Accept를 호출하여 클라이언트의 연결을 기다린다. 연결이 수립되면 PsdkMopChannel_SendDataPsdkMopChannel_RecvData를 통해 양방향 데이터 교환이 이루어진다.33

  • 추상화: MOP는 AirLink, UART, USB 등 복잡한 물리적 통신 링크를 추상화하여, 개발자가 일관된 채널 기반 API를 통해 각기 다른 SDK 컴포넌트와 쉽게 통신할 수 있도록 한다. 이는 복잡한 통합 애플리케이션 개발을 크게 단순화한다.

5. 통신 프로토콜 및 데이터 전송 매커니즘

PSDK 통신 스택을 이해하는 것은 데이터 흐름을 디버깅하고 최적화하는 데 필수적이다. 이 섹션에서는 물리 계층부터 애플리케이션 계층까지의 통신 메커니즘을 분석한다.

5.1 물리 계층 인터페이스 (UART TTL, USB)

  • 전기적 사양: PSDK 통신의 가장 기본적인 전기적 인터페이스는 3.3V TTL(Transistor-Transistor Logic) 레벨의 UART(범용 비동기 송수신기)이다.32 개발자는 페이로드의 MCU UART 포트가 3.3V 레벨에서 동작하는지 반드시 확인해야 한다. RS-232와 같이 다른 전압 레벨을 사용하는 경우, 레벨 시프터 회로를 사용하여 전압을 변환하지 않으면 드론의 비행 컨트롤러에 영구적인 손상을 줄 수 있다.

  • 핀아웃 및 연결: 각 하드웨어 인터페이스(E-Port V2, OSDK 포트 등)는 고유한 핀 배열을 가진다. 개발자는 공식 문서를 참조하여 VCC(전원), GND(접지), UART_TX, UART_RX, PPS 등 각 핀의 기능을 정확히 파악하고 연결해야 한다.15

  • 고속 인터페이스: E-Port V2와 같은 최신 인터페이스는 UART 외에도 USB 2.0/3.0 및 이더넷과 같은 고속 통신을 위한 물리적 연결을 제공한다.15 이러한 인터페이스를 사용하기 위해서는 해당 프로토콜에 맞는 하드웨어 및 소프트웨어 설계가 필요하다.

5.2 DJI 내부 통신 프로토콜 분석

물리 계층 위에서 데이터는 DJI의 독점적인 직렬 통신 프로토콜에 따라 패킷화되어 전송된다.35

  • 프레임 형식: 모든 데이터 패킷은 헤더, 길이, 버전, 세션 ID, 암호화 유형, 데이터 페이로드, 체크섬 등으로 구성된 표준화된 프레임 형식을 따른다.36

  • 세션 메커니즘: 신뢰성 있는 통신을 보장하기 위해 ’세션 메커니즘’이 사용된다. 명령 패킷과 응답(Ack) 패킷이 유실 없이 전달되도록 보장하는 역할을 한다. 세션 ID에 따라 신뢰성 요구 수준이 다른 통신 채널이 할당된다.36

  • 추상화 계층: PSDK 개발자는 일반적으로 이 저수준 직렬 프로토콜을 직접 다룰 필요가 없다. PSDK 라이브러리가 이 모든 복잡성을 추상화하여, 개발자가 PsdkGimbal_Rotate와 같은 고수준 API 함수를 호출하면 라이브러리 내부에서 이를 적절한 프로토콜 패킷으로 변환하여 전송한다. 하지만 통신 오류 발생 시 문제의 원인이 애플리케이션 로직에 있는지, 아니면 이 저수준 프로토콜 단계에서의 패킷 손상이나 타임아웃에 있는지 진단하기 위해서는 이러한 통신 스택의 계층적 구조를 이해하는 것이 매우 중요하다. 디버깅은 [애플리케이션] → → → [물리 드라이버] → [드론]의 각 계층을 따라 체계적으로 접근해야 한다.

5.3 데이터 채널 유형 및 대역폭 관리

PSDK는 애플리케이션 계층에서 두 가지 논리적 데이터 채널을 제공하며, 개발자는 이를 전략적으로 사용해야 한다.8

  • 채널 분리: 명령 채널은 제어 신호와 같이 작고 지연에 민감한 데이터를 위해, 고속 데이터 채널은 영상이나 대용량 파일과 같이 처리량이 중요한 데이터를 위해 사용된다. 이 두 채널을 분리하여 사용함으로써, 대용량 데이터 전송이 중요한 제어 명령의 전달을 방해하지 않도록 보장할 수 있다.

  • 대역폭 할당 (QoS): 고속 데이터 채널 내에서도 여러 종류의 데이터를 동시에 전송해야 할 수 있다. PSDK는 API를 통해 각 데이터 스트림에 대한 대역폭 점유율을 설정하는 기능을 제공한다.8 예를 들어, 실시간 영상 스트림에 70%의 대역폭을 할당하고, 백그라운드 파일 다운로드에 30%를 할당함으로써 중요한 데이터의 서비스 품질(QoS)을 보장할 수 있다. 이는 페이로드의 통신 성능을 최적화하는 핵심적인 기능이다.

6. PSDK 페이로드 개발 워크플로우 및 배포 전략

이 섹션에서는 아이디어 구상부터 실제 제품 양산에 이르기까지, PSDK 페이로드 개발의 전체 과정을 단계별로 안내한다.

6.1 개발 준비 단계

  1. 개발자 계정 등록: DJI 개발자 웹사이트에서 개발자 계정을 등록한다. PSDK 애플리케이션을 처음 생성할 때는 PSDK 개발자로서의 권한을 신청해야 한다.10

  2. 애플리케이션 생성 및 키 발급: 개발자 센터에서 새로운 PSDK 애플리케이션을 생성한다. 이 과정에서 애플리케이션을 식별하는 고유한 App ID와 App Key가 발급된다. 이 정보는 페이로드 인증에 필수적이므로 안전하게 보관해야 한다.3

  3. 하드웨어 구매: 개발 대상인 DJI 드론 기체와 페이로드 개발에 사용할 하드웨어 개발 키트(예: E-Port V2 개발 키트, SkyPort V2) 및 컴퓨팅 플랫폼(예: Jetson Nano, STM32 개발 보드)을 구매한다.10

6.2 개발 및 디버깅 단계

  1. 샘플 코드 다운로드: DJI SDK의 공식 GitHub 저장소에서 최신 버전의 PSDK 소스 코드를 복제(clone)한다.1

  2. 애플리케이션 정보 입력: 다운로드한 소스 코드 내에서 자신의 플랫폼(Linux 또는 RTOS)에 맞는 샘플 디렉토리를 찾는다. dji_sdk_app_info.h와 같은 지정된 헤더 파일을 열어, 이전 단계에서 발급받은 App ID, App Key, 그리고 개발자 계정 정보를 정확하게 입력한다. 이 정보 없이는 PSDK가 초기화되지 않는다.20

  3. 컴파일:

  • Linux: build 디렉토리를 생성하고, cmake..make 명령어를 사용하여 소스 코드를 컴파일한다.22

  • RTOS: Keil MDK IDE에서 해당 프로젝트 파일을 열고 ’Build’를 실행하여 펌웨어 바이너리 파일을 생성한다.22

  1. 펌웨어/프로그램 실행:
  • Linux: 컴파일된 실행 파일을 sudo 권한으로 실행한다 (예: sudo./dji_sdk_demo_linux).22

  • RTOS: J-Link와 같은 디버거를 사용하여 컴파일된 바이너리를 MCU에 플래시(burn)한다. 직렬 디버깅을 위해 터미널의 전송 속도(baud rate)를 921600과 같이 샘플 코드에 명시된 값으로 설정한다.22

6.3 애플리케이션 바인딩 및 인증

바인딩(Binding)은 개발된 페이로드 애플리케이션을 특정 하드웨어 및 드론과 공식적으로 연결하는 필수적인 보안 절차이다.

  1. 물리적 연결: 개발 보드 또는 페이로드를 드론의 PSDK 호환 포트에 연결한다.

  2. DJI Assistant 2 연결: 드론을 USB 케이블로 PC에 연결하고 DJI Assistant 2 소프트웨어를 실행한다. 이때 ‘데이터 인증’ 옵션이 활성화되어 있는지 확인해야 한다.37

  3. 바인딩 실행: DJI Assistant 2에 App ID를 생성한 개발자 계정으로 로그인한다. ‘Payload SDK’ 탭으로 이동하면 연결된 페이로드 하드웨어 정보가 표시된다. ‘Bind’ 버튼을 클릭하여 바인딩을 진행한다.37

이 바인딩 과정은 DJI의 생태계 제어 및 보안의 핵심 메커니즘이다. 이는 암호학적 핸드셰이크를 통해 1) 개발자 애플리케이션(App ID 기준), 2) 특정 물리적 하드웨어(인터페이스의 고유 시리얼 번호 기준), 그리고 3) 드론 본체를 상호 인증하고 연결한다. 이 3자 신뢰 관계는 승인되지 않은 비인가 페이로드가 드론의 핵심 기능에 접근하여 잠재적인 안전 문제를 일으키는 것을 방지한다. 바인딩 실패는 “계정 정보 불일치”, “인증 정보 오류” 등 다양한 오류를 유발하며, 개발 과정에서 가장 흔하게 마주치는 문제 중 하나이다.37

6.4 양산 및 배포

PSDK 애플리케이션은 두 가지 모드로 운영된다.38

  • 개발 모드 (Development Mode): 기본 모드로, 하나의 PSDK 앱 당 최대 10개의 X-Port 또는 SkyPort 장치만 바인딩할 수 있다. 소규모 테스트 및 개발에 적합하다.

  • 양산 모드 (Production Mode): 바인딩할 수 있는 장치의 수에 제한이 없다. 상용 제품을 대량 생산하고 배포하기 위해서는 반드시 양산 모드 승인을 받아야 한다.

과거에는 양산 모드 전환에 신청 비용이 부과되었으나, DJI는 서드파티 페이로드 생태계 확장을 가속화하기 위해 이 비용을 폐지했다.38 현재 개발자는 무료로 양산 모드를 신청할 수 있으며, 이는 소규모 개발사나 스타트업이 상용 페이로드 시장에 진입하는 데 있어 큰 장벽을 제거한 중요한 정책 변화이다.

7. 주요 문제 해결 및 기술 지원 리소스

PSDK 개발 과정에서는 하드웨어, 소프트웨어, 네트워크 등 다양한 영역에서 문제가 발생할 수 있다. 성공적인 개발자는 이러한 문제들을 체계적으로 진단하고 해결하는 능력을 갖추어야 한다.

7.1 일반적인 컴파일 및 바인딩 오류

  • 컴파일 오류:

  • 아키텍처 불일치: Linux 환경에서 CMake 빌드 시 “Please confirm your platform“과 같은 오류가 발생하는 경우가 있다. 이는 빌드 스크립트가 uname -m 명령을 통해 시스템 아키텍처(x86_64, aarch64 등)를 확인하는데, 현재 시스템이 지원 목록에 없기 때문이다. 이 경우 CMakeLists.txt 파일을 수정하여 현재 아키텍처를 추가해야 할 수 있다.39

  • 링커 오류: Keil MDK에서 “error: L6050U“와 같은 링커 오류는 메모리 영역 설정 문제일 수 있다.22

  • 바인딩 오류: DJI Assistant 2에서 바인딩 실패 시 표시되는 오류 코드와 해결 방법은 다음과 같다.37

  • “Unable to get the information of the payload”: 하드웨어 연결 불량 또는 페이로드 프로그램이 정상적으로 실행되지 않는 경우. 물리적 연결과 펌웨어 동작을 확인해야 한다.

  • “Account illegal”: 페이로드 코드에 입력된 개발자 계정 정보와 Assistant 2에 로그인된 계정이 일치하지 않는 경우.

  • “Server exception” (오류 코드 500): DJI 서버 측의 일시적인 문제일 수 있다.

  • “The payload’s applications is no found” (오류 코드 700): App ID가 유효하지 않거나 서버에서 찾을 수 없는 경우.

7.2 하드웨어 연결 및 통신 문제 해결

페이로드가 인식되지 않거나 통신이 간헐적으로 끊기는 문제는 종종 기본적인 물리적 연결에서 비롯된다.

  • 커넥터 체결 불량: PSDK 커넥터가 드론의 포트에 완전히 체결되지 않은 경우가 의외로 많다. ‘딸깍’ 소리가 날 때까지 단단히 눌러 체결해야 한다.40

  • 포트 활성화: 일부 기체의 경우, DJI Pilot 앱 설정에서 PSDK 포트를 수동으로 활성화해야 할 수 있다.40

  • UART 설정 확인: 통신이 이루어지지 않을 경우, 페이로드 측의 UART 설정(전송 속도, 데이터 비트, 정지 비트, 패리티 없음)이 드론 포트의 설정과 정확히 일치하는지 확인해야 한다. SkyPort V2/X-Port의 경우, DJI Assistant 2를 통해 전송 속도를 설정할 수 있다.14

7.3 주요 오류 코드 분석

PSDK API 함수들은 실행 결과를 T_DjiReturnCode 형식의 열거형(enum)으로 반환한다. 이 오류 코드를 분석하면 문제의 원인을 파악하는 데 큰 도움이 된다. 주요 오류 모듈과 코드는 다음과 같다.41

  • DJI_ERROR_SYSTEM_MODULE_CODE_...: 시스템 레벨 오류.

  • ..._UNMATCH_APP_ID: 코드에 입력된 App ID가 개발자 계정과 일치하지 않음.

  • ..._SDK_VERSION_NOT_MATCH: PSDK 라이브러리 버전이 드론 펌웨어와 호환되지 않음.

  • DJI_ERROR_MOP_CHANNEL_MODULE_RAW_CODE_...: MOP 채널 통신 오류.

  • ..._CONNECTION_CLOSE: 상대방 측에서 연결이 비정상적으로 종료됨.

  • DJI_ERROR_FC_MODULE_CODE_...: 비행 제어 관련 오류.

  • ..._RC_MODE_ERROR: 조종기의 모드 스위치가 올바른 위치에 있지 않음.

  • DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_...: 짐벌 관리 오류.

이러한 오류 코드들은 dji-error.h 헤더 파일에 상세히 정의되어 있으며, 개발자는 모든 API 호출의 반환 값을 확인하여 예외 처리를 수행해야 한다.

7.4 공식 개발자 리소스 활용 방안

문제 해결 과정에서 공식 리소스를 적극적으로 활용하는 것이 중요하다.

  • 공식 문서 및 GitHub: 개발을 시작하기 전에 DJI 개발자 웹사이트의 튜토리얼과 API 레퍼런스를 숙지하는 것이 기본이다.1 GitHub 저장소의

README.md 파일과 릴리스 노트는 최신 변경 사항과 알려진 이슈를 확인하는 데 유용하다.1

  • 개발자 포럼: DJI SDK 개발자 포럼은 다른 개발자들과 지식을 공유하고 질문을 올릴 수 있는 가장 활발한 커뮤니티이다. 대부분의 일반적인 문제들은 포럼의 기존 게시물이나 기술 자료(Knowledge Base)에서 해결책을 찾을 수 있다.1

  • Stack Overflow: dji-sdk 태그를 사용하여 Stack Overflow에 질문을 게시하면 전 세계 개발자 커뮤니티로부터 도움을 받을 수 있다.1

  • 기술 지원 티켓: 포럼이나 문서에서 해결책을 찾을 수 없는 복잡한 문제의 경우, 개발자 웹사이트를 통해 공식 기술 지원팀에 문의(티켓 제출)할 수 있다.1

결론적으로, PSDK 개발은 단순한 임베디드 프로그래밍을 넘어선다. 성공적인 PSDK 개발자는 하드웨어 전기 연결부터 운영체제 권한 설정, 빌드 시스템 구성, DJI의 인증 및 보안 메커니즘, 그리고 애플리케이션 로직에 이르기까지 전 스택에 걸친 문제 해결 능력을 갖춘 종합적인 시스템 통합 전문가가 되어야 한다. 이러한 다학제적 접근 방식이야말로 PSDK의 잠재력을 최대한 활용하는 열쇠이다.

8. 참고 자료

  1. DJI Payload SDK (PSDK) - GitHub, https://github.com/dji-sdk/Payload-SDK
  2. PSDK API Documentation | Payload SDK - DJI Developer, https://developer.dji.com/doc/payload-sdk-api-reference/v2/en/
  3. Building a Searchlight with the DJI PSDK - RIIS LLC, https://www.riis.com/blog/building-a-searchlight-with-the-dji-psdk
  4. What’s PSDK - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/basic-introduction/whats-psdk.html
  5. Build a Drone Aerial-Specific toolkit - DJI Developer, https://developer.dji.com/payload-sdk
  6. Lowering Barriers to Entry for Fully-Integrated Custom Payloads on a DJI Matrice - arXiv, https://arxiv.org/html/2405.06176v1
  7. DJI Onboard SDK: Main Page - DJI Developer, https://developer.dji.com/onboard-api-reference
  8. Data Transmission - Payload SDK - DJI Developer, https://developer.dji.com/doc/payload-sdk-tutorial/en/function-set/basic-function/data-transmission.html
  9. Payload - Onboard SDK communication - DJI Developer, https://developer.dji.com/onboard-sdk/documentation/guides/component-guide-payload-communication.html
  10. How to Use PSDK - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/basic-introduction/how-to-use-psdk.html
  11. Payload SDK - DJI Developer, https://developer.dji.com/doc/payload-sdk-tutorial/en/model-instruction/choose-hardware-platform.html
  12. DJI Developer, https://developer.dji.com/
  13. Release Note - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/
  14. Porting - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/quick-start/porting.html
  15. Standard Hardware Port Introduction - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/quick-start/drone-port.html
  16. Payload Development Criterion - DJI Developer, https://developer.dji.com/doc/payload-sdk-tutorial/en/model-instruction/payload-develop-criterion.html
  17. Aircraft Hardware Connection - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/quick-start/device-connect.html
  18. DJI X-Port PSDK Gimbal for Skyport - Globe-Flight.de, https://www.globe-flight.de/DJI-X-Port-PSDK-Gimbal-for-Skyport
  19. DJI X-Port - Opening The Door To Fast Payload-to-Drone Integration - heliguy™, https://www.heliguy.com/blogs/posts/dji-x-port-opening-the-door-to-fast-payload-to-drone-integration/
  20. Jetson Nano Quick Start - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/quick-start/quick-guide/jetson-nano.html
  21. Development Platform - DJI Onboard SDK Documentation, https://developer.dji.com/onboard-sdk/documentation/purchaseguide/development-platform.html
  22. Run Sample Code - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/quick-start/run-sample-code.html
  23. Development Platform - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/model-instruction/choose-develop-platform.html
  24. Configure Linux Development Environment - DJI Developer, https://developer.dji.com/document/e34c3fc4-dc0e-4cbf-b7c0-589b6e941a01
  25. PPS Time Synchronization Adaptation from RTOS to Linux (UpXtreme SBC) #270 - GitHub, https://github.com/dji-sdk/Payload-SDK/issues/270
  26. SDK Guide for DJI’s Enterprise Drone Ecosystem - Insights, https://enterprise-insights.dji.com/blog/dji-sdk-guide
  27. Development Environment - Payload SDK, https://developer.dji.com/doc/payload-sdk-tutorial/en/payload-quick-start/config-develop-environment.html
  28. Software Environment Setup Guide - DJI Onboard SDK Documentation, https://developer.dji.com/onboard-sdk/documentation/development-workflow/environment-setup.html
  29. Gimbal Function - Payload SDK - DJI Developer, https://developer.dji.com/doc/payload-sdk-tutorial/en/function-set/basic-function/gimbal-function.html
  30. Gimbal Management - Payload SDK - DJI Developer, https://developer.dji.com/doc/payload-sdk-tutorial/en/function-set/basic-function/gimbal-management.html
  31. Basic Camera Management - Payload SDK - DJI Developer, https://developer.dji.com/doc/payload-sdk-tutorial/en/function-set/basic-function/basic-camera-management.html
  32. Device Connection - DJI Onboard SDK Documentation, https://developer.dji.com/onboard-sdk/documentation/quickstart/device-connection.html
  33. SDK Interconnection - DJI Onboard SDK Documentation - DJI Developer, https://developer.dji.com/onboard-sdk/documentation/tutorial/SDK-mop.html
  34. Hardware Setup Guide - DJI Onboard SDK Documentation, https://developer.dji.com/onboard-sdk/documentation/development-workflow/hardware-setup.html
  35. US11948465B2 - Control method, device, and system for locking, https://patents.google.com/patent/US11948465B2/en
  36. DJI Onboard API Document, http://download.dji-innovations.com/downloads/dev/OnboardSDK/Onboard_API_introduction_version_1.0.1_en.pdf
  37. Application Binding (Using X-Port、SkyPort V2、 SDK Certified Chip or E-Port V2) | Payload SDK - DJI Developer, https://developer.dji.com/doc/payload-sdk-tutorial/en/payload-quick-start/quick-guide/bind-application.html
  38. Major Updates to DJI’s SDK Support Policies, https://enterprise-insights.dji.com/blog/dji-developer-sdk-new-support-policies
  39. Trying to build an example from DJI PSDK (ERROR: Please confirm your platform.), https://stackoverflow.com/questions/70328905/trying-to-build-an-example-from-dji-psdk-error-please-confirm-your-platform
  40. PSDK / Payload question | DJI Matrice Drone Forum, https://matricepilots.com/threads/psdk-payload-question.25709/
  41. DJI Error - Payload SDK, https://developer.dji.com/doc/payload-sdk-api-reference/en/core/dji-error.html
  42. Issue with DJI SDK - Stack Overflow, https://stackoverflow.com/questions/39885927/issue-with-dji-sdk